home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
PROGRAMM
/
PASCAL
/
1463.ZIP
/
DRAW-2D.ARC
/
GETDIR.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1986-09-10
|
3KB
|
132 lines
PROCEDURE GETDIR(TYP:STR4; VAR ICODE:INTEGER);
(* ICODE = 0 if files are found *)
(* ICODE = 1 if no files on dev-path *)
CONST
GETDTA = 47;
GET1 = 78;
GETN = 79;
VAR
MSG,DSTR:SCRLINE;
T:CHAR;
ECODE,K2,K,L:INTEGER;
FNUM:STRING[3];
FILNM,TEMP,FNAME2:STR12;
FX : ARRAY [1..256] OF STR12;
FNAME:FSTR;
FOUND:BOOLEAN;
PROCEDURE FINDDTA(VAR DTASEG,DTAOFS:INTEGER);
VAR
REGPAC : REGIS;
BEGIN
WITH REGPAC DO
BEGIN
AX := GETDTA*256;
MSDOS(REGPAC);
DTASEG := ES;
DTAOFS := BX;
END;
END;
FUNCTION GETNAM:STR12;
VAR
I,DTASEG,DTAOFS:INTEGER;
CH:CHAR;
RESULT:STR12;
BEGIN
FINDDTA(DTASEG,DTAOFS);
RESULT := '';
I := 30;
CH := CHR(MEM[DTASEG:DTAOFS+I]);
WHILE CH <> CHR(0) DO
BEGIN
RESULT := CONCAT(RESULT,CH);
I := I+1;
CH := CHR(MEM[DTASEG:DTAOFS+I]);
END;
GETNAM := RESULT;
END;
PROCEDURE DIR1(SOURCE:FSTR; VAR NEWFIL:STR12; VAR STATUS:BOOLEAN);
VAR
REGPAC : REGIS;
FLG : BYTE;
BEGIN
SOURCE := CONCAT(SOURCE,CHR(0));
WITH REGPAC DO
BEGIN
AX := GET1*256;
DS := SEG(SOURCE);
DX := OFS(SOURCE)+1;
END;
MSDOS(REGPAC);
NEWFIL := '';
FLG := REGPAC.FLAGS AND 1;
IF FLG = 0 THEN
BEGIN
STATUS := TRUE;
NEWFIL := GETNAM;
END
ELSE
STATUS := FALSE;
END;
PROCEDURE DIRN(SOURCE:FSTR; VAR NEWFIL:STR12; VAR STATUS:BOOLEAN);
VAR
REGPAC : REGIS;
FLG : BYTE;
BEGIN
SOURCE := CONCAT(SOURCE,CHR(0));
WITH REGPAC DO
BEGIN
AX := GETN*256;
DS := SEG(SOURCE);
DX := OFS(SOURCE)+1;
END;
MSDOS(REGPAC);
NEWFIL := '';
FLG := REGPAC.FLAGS AND 1;
IF FLG = 0 THEN
BEGIN
STATUS := TRUE;
NEWFIL := GETNAM;
END
ELSE
STATUS := FALSE;
END;
BEGIN
ICODE := 0;
FILNM := '*'+TYP;
FNAME := FILNM;
CLS;
K2 := 1;
K := 2;
DIR1(FNAME,FNAME2,FOUND);
IF FOUND THEN
BEGIN
CLS;
MOVCUR(1,25);
WRITELN('Drawing Files on Current Drive/Path');
MOVCUR(3,1);
L := POS('.',FNAME2);
TEMP := COPY(FNAME2,1,L-1);
WRITE(TEMP,' ':10-LENGTH(TEMP));
FX[K2] := TEMP;
WHILE FOUND DO
BEGIN
DIRN(FNAME,FNAME2,FOUND);
IF FOUND THEN
BEGIN
L := POS('.',FNAME2);
TEMP := COPY(FNAME2,1,L-1);
K2 := K2 + 1;
WRITE(TEMP,' ':10-LENGTH(TEMP));
FX[K2] := TEMP;
K := K + 1;
IF K > 5 THEN
BEGIN
K := 1;
WRITELN;
END;
END;
END;
END
ELSE
ICODE := 1;
END;